package com.gouying.common.valid;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * 自定义校验注解@ListValue
 * <p>
 * Constraint：指定校验注解的校验器
 * Target：注解可以标注在哪些地方
 * Retention：注解的使用时机
 * Repeatable：注解是否可重复
 *
 * @author ly
 */

@Documented
@Constraint(validatedBy = {ListValueConstraintValidator.class})
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
public @interface ListValue {
    /**
     * 校验出错时的反馈信息（默认去括号中的位置中去取）
     *
     * @return
     */
    String message() default "{com.gouying.common.valid.ListValue.message}";

    /**
     * 支持分组校验功能
     *
     * @return
     */
    Class<?>[] groups() default {};

    /**
     * 自定义注解的负载信息
     *
     * @return
     */
    Class<? extends Payload>[] payload() default {};

    /**
     * 注解中vals字段的值
     *
     * @return
     */
    int[] vals() default {};
}
